package com.letv.core.network.volley;

import android.text.TextUtils;

import com.letv.core.bean.LetvBaseBean;

/**
 * 请求响应
 * 
 * @author zhuqiao
 * 
 */
public class VolleyResponse {

    /**
     * 响应供应者
     * 
     * @author zhuqiao
     */
    public enum ResponseSupplier {
        /**
         * 网络供应者
         */
        NETWORK,
        /**
         * 缓存供应者
         */
        CACHE
    }

    /**
     * 网络响应状态
     * 
     * @author zhuqiao
     */
    public enum NetworkResponseState {
        /**
         * 成功
         */
        SUCCESS,
        /**
         * 请求前验证失败
         */
        PRE_FAIL,
        /**
         * 没有网络
         */
        NETWORK_NOT_AVAILABLE,
        /**
         * 网络异常
         */
        NETWORK_ERROR,
        /**
         * 服务器数据错误(无法解析)
         */
        RESULT_ERROR,
        /**
         * 数据无更新
         */
        RESULT_NOT_UPDATE,
        /**
         * 忽略,不需要处理
         */
        IGNORE,
        /**
         * 未知错误(如果调用者拿到这个状态,可能框架逻辑有问题)
         */
        UNKONW
    }

    /**
     * 缓存响应状态
     * 
     * @author zhuqiao
     */
    public enum CacheResponseState {
        /**
         * 成功
         */
        SUCCESS,
        /**
         * 缓存异常
         */
        ERROR,
        /**
         * 忽略,不需要处理
         */
        IGNORE,
    }

    /** 如果是请求接口或者是文件缓存，那么data数据有效 **/
    public final String data;

    /** 如果是数据库缓存，那么entry数据有效 **/
    public final LetvBaseBean entry;

    /** 是否成功 **/
    public final boolean success;

    /** 是否来自http请求 **/
    public final ResponseSupplier dispatcherType;

    public VolleyResponse(ResponseSupplier responseSupplier) {
        this(null, null, false, responseSupplier);
    }

    public VolleyResponse(String data, ResponseSupplier responseSupplier) {
        this(data, null, !TextUtils.isEmpty(data), responseSupplier);
    }

    public VolleyResponse(LetvBaseBean entry, ResponseSupplier responseSupplier) {
        this(null, entry, entry != null, responseSupplier);
    }

    public VolleyResponse(String data, LetvBaseBean entry, boolean success, ResponseSupplier responseSupplier) {
        this.data = data;
        this.entry = entry;
        this.success = success;
        this.dispatcherType = responseSupplier;
    }

}
